//
//  SYHTTPWorking.h
//  SYBaseSDK_Example
//
//  Created by ligq on 2020/3/26.
//  Copyright © 2020 sysjones. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "SYNetworkingConstant.h"
@class RACSignal;

@interface SYHTTPWorking : NSObject

/*!
 *
 *  用于指定网络请求接口的基础url，如：
 *  http://henishuo.com或者http://101.200.209.244
 *  通常在AppDelegate中启动时就设置一次就可以了。如果接口有来源
 *  于多个服务器，可以调用更新
 *
 *  @param baseUrl 网络接口的基础url
 */
+ (void)updateBaseUrl:(NSString *)baseUrl;
+ (NSString *)baseUrl;

/**
 *    设置请求超时时间，默认为60秒
 *
 *    @param timeout 超时时间
 */
+ (void)setTimeout:(NSTimeInterval)timeout;

/*!
 *
 *  开启或关闭接口打印信息
 *
 *  @param isDebug 开发期，最好打开，默认是NO
 */
+ (void)enableInterfaceDebug:(BOOL)isDebug;
+ (BOOL)isDebug;

/*!
 *
 *  配置请求格式，默认为JSON。如果要求传XML或者PLIST，请在全局配置一下
 *
 *  @param requestType 请求格式，默认为JSON
 *  @param responseType 响应格式，默认为JSO，
 *  @param shouldAutoEncode YES or NO,默认为NO，是否自动encode url
 *  @param shouldCallbackOnCancelRequest 当取消请求时，是否要回调，默认为YES
 */
+ (void)configRequestType:(SYRequestType)requestType
             responseType:(SYResponseType)responseType
      shouldAutoEncodeUrl:(BOOL)shouldAutoEncode
  callbackOnCancelRequest:(BOOL)shouldCallbackOnCancelRequest;

/*!
 *
 *  配置公共的请求头，只调用一次即可，通常放在应用启动的时候配置就可以了
 *
 *  @param httpHeaders 只需要将与服务器商定的固定参数设置即可
 */
+ (void)configCommonHttpHeaders:(NSDictionary *)httpHeaders;
/*!
 *  配置HTTPS服务，注意一定放在配置请求格式后面开启
 */
+ (void)configHTTPSService;
/*!
 *  检测网络
 */
+ (void)detectNetwork;
/*!
*
*  GET请求接口，若不指定baseurl，可传完整的url
*
*  @param url     接口路径，如/path/getArticleList
*  @param params  接口中所需要的拼接参数，如@{"categoryid" : @(12)}
*  @param success 接口成功请求到数据的回调
*  @param fail    接口请求数据失败的回调
*
*  @return 返回的对象中有可取消请求的API
*/
+ (RACSignal *)getWithUrl:(NSString *)url
                          success:(SYResponseSuccess)success
                             fail:(SYResponseFail)fail;

// 多一个params参数
+ (RACSignal *)getWithUrl:(NSString *)url
                           params:(NSDictionary *)params
                          success:(SYResponseSuccess)success
                             fail:(SYResponseFail)fail;
// 多一个带进度回调
+ (RACSignal *)getWithUrl:(NSString *)url
                           params:(NSDictionary *)params
                         progress:(SYGetProgress)progress
                          success:(SYResponseSuccess)success
                             fail:(SYResponseFail)fail;

/*!
*
*  POST请求接口，若不指定baseurl，可传完整的url
*
*  @param url     接口路径，如/path/getArticleList
*  @param params  接口中所需的参数，如@{"categoryid" : @(12)}
*  @param success 接口成功请求到数据的回调
*  @param fail    接口请求数据失败的回调
*
*  @return 返回的对象中有可取消请求的API
*/
+ (RACSignal *)postWithUrl:(NSString *)url
                            params:(NSDictionary *)params
                           success:(SYResponseSuccess)success
                              fail:(SYResponseFail)fail;

+ (RACSignal *)postWithUrl:(NSString *)url
                            params:(NSDictionary *)params
                          progress:(SYPostProgress)progress
                           success:(SYResponseSuccess)success
                              fail:(SYResponseFail)fail;

/**
 *
 *    图片上传接口，若不指定baseurl，可传完整的url
 *
 *    @param image            图片对象
 *    @param url                上传图片的接口路径，如/path/images/
 *    @param filename        给图片起一个名字，默认为当前日期时间,格式为"yyyyMMddHHmmss"，后缀为`jpg`
 *    @param name                与指定的图片相关联的名称，这是由后端写接口的人指定的，如imagefiles
 *    @param mimeType        默认为image/jpeg
 *    @param parameters    参数
 *    @param progress        上传进度
 *    @param success        上传成功回调
 *    @param fail                上传失败回调
 *
 *    @return
 */
+ (RACSignal *)uploadWithImage:(UIImage *)image
                                   url:(NSString *)url
                              filename:(NSString *)filename
                                  name:(NSString *)name
                              mimeType:(NSString *)mimeType
                            parameters:(NSDictionary *)parameters
                              progress:(SYUploadProgress)progress
                               success:(SYResponseSuccess)success
                                  fail:(SYResponseFail)fail;

/**
 *
 *    上传文件操作
 *
 *    @param url                        上传路径
 *    @param uploadingFile    待上传文件的路径
 *    @param progress            上传进度
 *    @param success                上传成功回调
 *    @param fail                    上传失败回调
 *
 *    @return
 */
+ (RACSignal *)uploadFileWithUrl:(NSString *)url
                           uploadingFile:(NSString *)uploadingFile
                                progress:(SYUploadProgress)progress
                                 success:(SYResponseSuccess)success
                                    fail:(SYResponseFail)fail;


/*!
 *
 *  下载文件
 *
 *  @param url           下载URL
 *  @param saveToPath    下载到哪个路径下
 *  @param progressBlock 下载进度
 *  @param success       下载成功后的回调
 *  @param failure       下载失败后的回调
 */
+ (RACSignal *)downloadWithUrl:(NSString *)url
                            saveToPath:(NSString *)saveToPath
                              progress:(SYDownloadProgress)progressBlock
                               success:(SYResponseSuccess)success
                               failure:(SYResponseFail)failure;

@end

